var mapa = null;
var quantBancos = [0,0,0,0,0,0,0,0,0,0];
var blats;
var blons;
var legendas;
var nBancos;

function initialize(local) {
    if(local === null)
        local = new google.maps.LatLng(-23.524959, -46.645203);

    var myOptions = {
        center: local,
        zoom: 14,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    mapa = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    getBancos(local, mapa);
    getZona(local);
    document.getElementById('spanCoordenadas').innerHTML = "Coordenadas:<br>Lat: " 
        + local.lat() + " Lon: " + Math.floor(local.lng() * 10000000) / 10000000;
}

function setLocal(){
    var $inputVal = $('#txtLatLong').val();
    if($inputVal){
        var values = $inputVal.split(';');

        if(values.length < 2){
            debug('coordenadas invalidas!');
            return;
        }

        var lat = Number(values[0]);
        var lng = Number(values[1]);

        if(lat == 0 || lng == 0){
            debug('coordenadas invalidas!');
            return;
        }
        var local = new google.maps.LatLng(lat, lng);
        initialize(local);
    }
}

function criaMarcador(local, mapalocal, legenda){
    var $marker = new google.maps.Marker({
        position: local,
        animation: google.maps.Animation.DROP,
        title: legenda
    });
    $marker.setMap(mapalocal);
}

//Funcao para criar a rota (em linhas retas) entre pontos
function criaRota(local, mapalocal){
    var locais = [local];
    debug(nBancos);
    for (i = 0; i < nBancos; i++)
    {
        locais.push(new google.maps.LatLng(blats[i], blons[i]));
    }
    locais.push(local);
    debug(locais);
    var rota = new google.maps.Polyline({
        path: locais,
        strokeColor: "#FF0000",
        strokeOpacity: 1.0,
        strokeWeight: 2
    });
    
    var legendasLocais = ['Ponto de saida.'];
    for (i = 0; i < legendas.length; i++)
    {
        legendasLocais.push(legendas[i].toString());
    }
    rota.setMap(mapalocal);
    legendasLocais.push('Ponto de saida.');
    for(i = 0; i < locais.length; i++){
        criaMarcador(locais[i], mapalocal, legendasLocais[i]);
    }      
}

function getBancos(local, mapa)
{
    blats = [];
    blons = [];
    legendas = [];
    nBancos = 0;
    var link = 'http://localhost:9998/servidorbancos/agencias/agenciasproximas/';
    link += local.lat() + "," + Math.floor(local.lng() * 10000000) / 10000000 + "," + //colocando a origem
            quantBancos[0] + "," + //colocando a quantidade de cada banco
            quantBancos[1] + "," +
            quantBancos[2] + "," +
            quantBancos[3] + "," +
            quantBancos[4] + "," +
            quantBancos[5] + "," +
            quantBancos[6] + "," +
            quantBancos[7] + "," +
            quantBancos[8] + "," +
            quantBancos[9];
    
    $.ajax({
        type: "GET",
        dataType : "jsonp",
        url: link,
        crossDomain: true,
        async: false,
        jsonp: 'jsoncallback',

        success: function(data) {
            $(data).each(function(){
                blats.push(this.lat);
                blons.push(this.lon);
                legendas.push(this.banco);
                nBancos += 1;
            })
            
            debug(blats);
            debug(blons);
            debug(legendas);
            debug(nBancos);
            criaRota(local, mapa);
            
            return true;
        }
    });
    debug("Bancos proximos retornados com sucesso.");
}

function getZona(local)
{
    var link = 'http://localhost:9998/servidorbancos/agencias/zona/';
    link += local.lat() + "," + Math.floor(local.lng() * 10000000) / 10000000;
    $.ajax({
        type: "GET",
        dataType : "jsonp",
        url: link,
        crossDomain: true,
        async: false,
        jsonp: 'jsoncallback',

        success: function(data){
            $(data).each(function(){
                document.getElementById('spanZona').innerHTML = this.zona;
            })
        }
    });
}

function debug(log_txt) {
    if (window.console != undefined) {
        console.log(log_txt);
    }
}


function getGeoLocation(cep){
    var user1Location = cep;
        var geocoder = new google.maps.Geocoder();
        //convert location into longitude and latitude
        geocoder.geocode({
            address: user1Location
        }, function(locResult) {
            console.log(locResult);
            var lat1 = Math.floor(locResult[0].geometry.location.lat() * 10000000) / 10000000;
            var lng1 = Math.floor(locResult[0].geometry.location.lng() * 10000000) / 10000000;
            debug(lat1  + " " + lng1);
            initialize(new google.maps.LatLng(lat1, lng1));
        });
}

function setCEP(){
    var $inputVal = $('#txtCEP').val();
    getGeoLocation($inputVal);
}

function addBanco(){
    var $form           = $('#inputLatLong');
    var $linhaBancos    = $("#linhaBancos");

    var selected = $form.find('#ddlBanco option:selected').val();
    var qtd      = $form.find('#txtQtd').removeClass('error').val();
    
    if(selected == null) return;
    if (qtd == ""){
         $form.find('#txtQtd').addClass('error');
         return;
    }

    $form.find('#ddlBanco option:selected').remove();
    

     var $insert = $('</p>').append('<span />').attr({
                                    'class' : 'qtdbanco'
                             }).html(qtd  + ' ' + selected)
                             .hover(function(){
                                        $(this).css({'background-color' : '#f1f1f1'});
                                    },
                                    function(){
                                        $(this).css({'background-color' : '#fff'});
                                    }
                                );
                 
                
    $linhaBancos.append($insert);
    
    debug(selected);
    
    if(selected == "Banco do Brasil")
        quantBancos[0] = parseInt(quantBancos[0], 10) + parseInt(qtd, 10);
    else if(selected == "Banco Santander_Real")
        quantBancos[1] = parseInt(quantBancos[1], 10) + parseInt(qtd, 10);
    else if(selected == "Banco Itau")
        quantBancos[2] = parseInt(quantBancos[2], 10) + parseInt(qtd, 10);
    else if(selected == "Caixa Economica Federal")
        quantBancos[3] = parseInt(quantBancos[3], 10) + parseInt(qtd, 10);
    else if(selected == "Bradesco")
        quantBancos[4] = parseInt(quantBancos[4], 10) + parseInt(qtd, 10);
    else if(selected == "HSBC")
        quantBancos[5] = parseInt(quantBancos[5], 10) + parseInt(qtd, 10);
    else if(selected == "Banco 24 Horas")
        quantBancos[6] = parseInt(quantBancos[6], 10) + parseInt(qtd, 10);
    else if(selected == "Citibank")
        quantBancos[7] = parseInt(quantBancos[7], 10) + parseInt(qtd, 10);
    else if(selected == "Safra")
        quantBancos[8] = parseInt(quantBancos[8], 10) + parseInt(qtd, 10);
    else if(selected == "Sudameris")
        quantBancos[9] = parseInt(quantBancos[9], 10) + parseInt(qtd, 10);
}

var bancos = function(nome, quantidade){
    this.nome = nome;
    this.quantidade = quantidade;
}